#include<stdio.h>
#include<stdlib.h>
#include <float.h>
#include<limits.h>

void main()
{
    // sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小
// 基本类型：
    // 整数类型
    printf("char storage size: %u %u %u\n", sizeof(char), CHAR_MIN, CHAR_MAX);
    printf("unsigned char storage size: %u\n", sizeof(unsigned char));
    printf("signed char storage size: %u\n", sizeof(signed char));

    printf("int storage size: %u %u %u\n", sizeof(int), INT_MAX, INT_MIN);
    printf("unsigned int storage size: %u\n", sizeof(unsigned int));
    printf("short storage size: %u\n", sizeof(short));
    printf("unsigned short storage size: %u\n", sizeof(unsigned short));
    printf("long storage size: %u\n", sizeof(long));
    printf("unsigned long storage size: %u\n", sizeof(unsigned long));
    printf("int storage size : %lu \n", sizeof(int));//%lu 为 32 位无符号整数

    // 浮点类型
    printf("**********************\n\n");
    printf("float storage size: %u \n", sizeof(float));
    printf("float Maximum number of bytes stored: %lu \n", sizeof(float));
    printf("float minimum: %E\n", FLT_MIN );
    printf("float maximum: %E\n", FLT_MAX );
    printf("precision: %d\n\n", FLT_DIG ); // 6
    printf("double storage size: %u \n", sizeof(double));
    printf("long double storage size: %u \n", sizeof(long double));
    printf("**********************\n");

// 枚举类型


// void 类型
/*
	指针指向 void
        类型为 void * 的指针代表对象的地址，而不是类型。
        例如，内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针，可以转换为任何数据类型。
*/


// 派生类型：


// 强制类型转换形式
    float f,x=3.6,y=5.2;
    int i=4,a,b;
    a=x+y; // 自动转换
    b=(int)(x+y); //强制类型转换
    f=10/i; // 自动转换
    printf("a=%d,b=%d,f=%f,x=%f\n",a,b,f,x);


    system("pause");
}

/*
基本类型：算术类型，包括两种类型：整数类型和浮点类型
枚举类型：也是算术类型，被用来定义在程序中只能赋予其一定的离散整数值的变量
void 类型：类型说明符 void 表明没有可用的值
派生类型：包括：指针类型、数组类型、结构类型、共用体类型和函数类型
*/